<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
    <title>day3-node.js编写首个服务器程序</title>
<style type="text/css">
    body{
        width: 80%;
        margin: 0 auto;
    }
    div{
        width: 50%;
         text-indent:2em;
    }
</style>
</head>
<body>

<h2>在本地服务器上打出Hello World</h2>
    <pre style="color:red">
    var http = require('htpp');
    http.createSercer(function (req, res){
        res.writeHead(200, {'Content-Type' : 'text/plain'});
        res.end('Hello World\n');
    }).listen(8124, "127.0.0.1");
    console.log('Server running at http://127.0.0.1:8124');
    </pre>
        <div style="color:gray">
        这个示例代码首先通过require 方法把HTTP 库包含到程序中来。有许多语言都有包含其他库这一方法，Node 用的是CommonJS 模块风格。Node 模块将在第8 章详细介绍，当前需要了解的是，HTTP 库所具有的功能已经赋给了http 对象。
        </div>
        <div style="color:gray">
        下一步，我们需要一个HTTP 服务器。PHP 等其他语言需要在类似Apache 这样的服务器中运行，而Node 和它们不同，因为Node 本身就是Web 服务器。但这同样意味着我们需要先创建该服务器。
        </div>
        <div style="color:gray">
        下一行代码调用HTTP 模块的一个工厂模式方法（createServer）来创建新的HTTP 服务器。新创建的HTTP 服务器并没有赋值给
        任何变量，它只会成为存活在全局范围内的匿名对象。我们可以通过链式调用来初始化服务器，并告诉它监听在8124 端口。
        </div>
        <div style="color:gray">
        当调用createServer 的时候，我们传了一个匿名函数作为参数。此函数绑定在新创建服务器的事件监听器上进行request 事件处理。消息事件是JavaScript 和Node 的核心。
        </div>
        <div style="color:gray">
        在这个例子中，每当一个新的访问请求到达Web 服务器，它都将调用我们指定的函数方法来处理。我们称这类方法为回调（callback）。因为每当一个事件发生时，我们将回调监听此事件的所有函数。
        </div>
    <br>


<h2>创建新的TCP 服务器</h2>
    <pre style="color:red">
    var net = require('net')
    var chatServer = net.createServer()
    chatServer.on('connection', function(client) {
        client.write('Hi!\n');
        client.write('Bye!\n');
        client.end()
    })
    chatServer.listen(9000)
    </pre>

        <div style="color:gray">接着，我们调用net.createServer() 方法来创建一个新的TCP 服务器。有了这个服务器，我们需要用它做点儿事。这里调用on() 方法来添加一个事件监听器。
         </div>
        <div style="color:gray">每当有新的客户端通过网络连接接入服务器，就会触发connection 事件，事件监
        听器就会调用我们指定的函数。
         </div>
        <div style="color:gray">
        连接事件在调用回调函数时，会传给我们新客户端所对应的TCP socket 对象的引
        用。我们把此引用命名为client。调用client.write()，就能发送信息给该客户端。目前，我们只是简单地发送“Hi!” 和“Bye!”，然后调用client.end() 方法来关闭连接。就这么简单，我们的聊天服务器已经初露端倪了。最后，需要调用
        listen() 函数，好让Node 知道监听哪个端口。让我们马上测试一下吧。
         </div>
        <div style="color:gray">
        我们可以使用Telnet1（大多数操作系统都自带此程序）来连接新服务器进行测试。首先，调用node 命令并带上文件名来启动服务器。然后，打开Telnet 连接到localhost 的9000 端口（这是我们在Node 程序中指定的端口）
        </div>
    <h4>用Telnet 连接Node TCP 服务器</h4>
    <pre style="color:red">
    Console Window 1h
    ----------------
    Enki:~ $ node chat.js
    Chat server started
    Console Window 2
    ----------------
    Last login: Tue Jun 7 20:35:14 on ttys000
    Enki:~ $ telnet 127.0.0.1 9000
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    Hi!
    Bye!
    Connection closed by foreign host.
    Enki:~ $
    </pre>
    <p>by:豆腐</p>
    <p style="width:40%">由于用的是win7系统，并且第一次用node.js还有控制台链接本地服务器，对此不太熟，并没有成功链接上。明天将会试用虚拟机在Linux的ubuntu系统上跑一次╮(╯▽╰)╭</p>
</body>
</html>
